package com.bdjk.bdmw.InfoGath.communication.protocol.beianbei;

import com.bdjk.bdmw.InfoGath.business.beianbei.vo.BeiAnBeiPositionVO;
import com.bdjk.bdmw.InfoGath.communication.protocol.BaseProtocol;

public class BeiAnBeiAlarmProtocol
  extends BaseProtocol<BeiAnBeiPositionVO>
{
  public BeiAnBeiAlarmProtocol()
  {
    this.isResponse = true;
    this.isSave = true;
  }
  
  public String encodeMessage(BeiAnBeiPositionVO vo)
  {
	  StringBuffer msgBuffer = new StringBuffer("[");
	  msgBuffer.append(vo.getCommType()).append("*").append(vo.getTerIdent());
	  String strprefix = msgBuffer.toString();
	  StringBuffer record = new StringBuffer(strprefix).append("*0002*"+vo.getProCode()+"]");
	  return record.toString();
  }
  
  public BeiAnBeiPositionVO decodeMessage(String message)
  {
    BeiAnBeiPositionVO vo = new BeiAnBeiPositionVO();
    String[] strs = message.split(",");
    int proIndex = 0;
    String[] terParams = strs[(proIndex++)].split("\\*");
    vo.setCommType(terParams[0]);
    vo.setTerIdent(terParams[1]);
    vo.setMsgLength(terParams[2]);
    vo.setProCode(terParams[3]);
    StringBuffer st = new StringBuffer("20");
    st.append(strs[proIndex].substring(4) + "-" + strs[proIndex].substring(2, 4) + "-" + strs[(proIndex++)].substring(0, 2) + " ");
    st.append(strs[proIndex].substring(0, 2) + ":" + strs[proIndex].substring(2, 4) + ":" + strs[(proIndex++)].substring(4));
    vo.setSendTime(st.toString());
    
    vo.setIsEchoLocation(strs[(proIndex++)]);
    
    vo.setLatitude(strs[(proIndex++)]);
    proIndex++;
    
    vo.setLongitude(strs[(proIndex++)]);
    proIndex++;
    
    vo.setSpeed(strs[(proIndex++)]);
    
    vo.setDirection(strs[(proIndex++)]);
    
    vo.setAltitude(strs[(proIndex++)]);
    
    vo.setSatelliteNum(strs[(proIndex++)]);
    
    vo.setGsmSignStrength(strs[(proIndex++)]);
    
    vo.setElectricity(strs[(proIndex++)]);
    
    vo.setStepNum(strs[(proIndex++)]);
    
    vo.setRollNum(strs[(proIndex++)]);
    
    String strstatus=strs[proIndex];
    vo.setTerStatus(strs[(proIndex++)]);
    
    
    StringBuffer baseInfo = new StringBuffer();
    baseInfo.append(strs[proIndex]);
    int baseNum = Integer.valueOf(strs[(proIndex++)]).intValue();
    for (int i = 0; i < baseNum * 3 + 3; i++)
    {
      if (i % 3 == 0) {
        baseInfo.append("#");
      } else {
        baseInfo.append("|");
      }
      baseInfo.append(strs[(proIndex++)]);
    }
    vo.setBaseInfo(baseInfo.toString());
    
    StringBuffer wifiInfo = new StringBuffer();
    wifiInfo.append(strs[proIndex]);
    int wifiNum = Integer.valueOf(strs[(proIndex++)]).intValue();
    for (int i = 0; i < wifiNum * 3; i++)
    {
      if (i % 3 == 0) {
        wifiInfo.append("#");
      } else {
        wifiInfo.append("|");
      }
      wifiInfo.append(strs[(proIndex++)]);
    }
    vo.setWifiInfo(wifiInfo.toString());
    this.terIdent = vo.getTerIdent();
    
    ParseStatus(vo);
    return vo;
  }
  
  public void ParseStatus(BeiAnBeiPositionVO vo){
	  int status = Integer.valueOf(vo.getTerStatus());
	 // 低电量报警
	  int sosMask = Integer.valueOf("00010000", 16);
	  //低电量报警
	  int lowBattMask=Integer.valueOf("00020000",16);
	  //出围栏报警
	  int outGuardMask=Integer.valueOf("00040000",16);
	  //进围栏报警
	  int inGuardMask=Integer.valueOf("00080000",16);
	  //拆除报警
	  int removeMask=Integer.valueOf("00100000",16);
	  if(1==(status&sosMask)){
		  System.out.println("sos");
	  }
	  if(1==(status&lowBattMask)){
		  System.out.println("low battery");
	  }
	  if(1==(status&outGuardMask)){
		  System.out.println("out of guard");
	  }
	  if(1==(status&inGuardMask)){
		  System.out.println("get in Guard");
	  }
	  if(1==(status&removeMask)){
		  System.out.println("remove Watch");
	  }
  }
}
